/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.utn.bondisutn;

import java.util.Calendar;

/**
 *
 * @author Raul
 */
public class Calculador {
    private String proximo;
    private String siguiente;
    
    Calendar ahora;

    
    public Calculador(Calendar ahora) {
        this.ahora = ahora;
    }

    public String getProximo() {
        return proximo;
    }

    public String getSiguiente() {
        return siguiente;
    }
    
    public void calcularProximos(int [][] horarios, int ubicacion){
        int horaActual = ahora.get(Calendar.HOUR_OF_DAY)*100+ahora.get(Calendar.MINUTE);
        int ix = busquedaBin(horarios[ubicacion], horaActual);
        int p = horarios[ubicacion][ix];
        int s = horarios[ubicacion][(ix+1)%horarios[ubicacion].length];
        proximo = horaToString(p) + "      " + diferenciaHoraria(p, horaActual) + " min";
        siguiente = horaToString(s) + "      " + diferenciaHoraria(s, horaActual) + " min";
    }
   
    private int diferenciaHoraria(int horaMayor, int horaMenor){
        int dh = horaMayor/100 - horaMenor/100;
        int dm = horaMayor%100 - horaMenor%100;
        return dh*60+dm;
    }
    
    private int busquedaBin(int[] vector, int horaActual){
        int primero = 0;
        int ultimo = vector.length-1;
        int ix = -1;
        int medio;
        while (primero<=ultimo && ix==-1){
            medio = (primero+ultimo)/2;
            if (vector[medio]>=horaActual && (medio==0 ||vector[medio-1]<horaActual)){
                ix = medio;
            } else {
                if (vector[medio]<horaActual){
                    primero = medio + 1;
                } else {
                    ultimo = medio - 1;
                }
            }
        }
        return ix!=-1?ix:0;
    }
    
    private String horaToString(int hora){
        return ""+hora/100+":"+formatear(hora%100);
    }
    
    private String formatear(int minutos){
        return minutos>9?""+minutos:"0"+minutos;
    }
}
